Data storage systems (for example, solid state drives (SSD), hard disk drives, and the like) may use Low Density Parity Check (LDPC) to correct errors that occur when storing and reading or sending and receiving information. For instance, for a normal read operation for an SSD, raw data read from the flash memory device is passed through decoding before the SSD controller returns the data to a host. If the decoding fails, the controller invokes an error correction subroutine. The error correction subroutine involves using different voltages to read from the flash memory device, and trying different Log Likelihood Ratio (LLR) tables for LDPC decoding.